package com.alm.handle.redis;

import com.alm.handle.util.RedisUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;

@Component
public class RedisService {

    @Resource
    private RedisUtil redisUtil;

    //
    private final Logger logger = LoggerFactory.getLogger(RedisService.class);
    /** 删除一个用户的缓存信息. */
    public void deleteUserInfo(String token) {
        redisUtil.del(token);
    }
    public void delkey(String key) {
        redisUtil.del(key);
    }
    /**
     * 缓存一个设备及通道id.
     */
    public void putCtxIdAndDeviceId(String deviceId, String ctxId) {
       // this.delCtxIdAndDeviceId(deviceId);
        redisUtil.set("deviceId" + deviceId, ctxId, 2 * 60);
        redisUtil.set("ctxId" + ctxId, deviceId, 2 * 60);
    }
    public void  setKey(String key,String  value,long time){
        redisUtil.set(key ,value, time);
    }
    public String  getKey(String key){
       return (String) redisUtil.get(key);
    }
    public boolean hasKeyCtx(String ctxId) {
        return redisUtil.hasKey("ctxId" + ctxId);
    }

    public boolean hasKeyDevId(String deviceId) {
        return redisUtil.hasKey("deviceId" + deviceId);
    }

    public String getDeviceIdByCtxId(String ctxId) {
        return (String) redisUtil.get("ctxId" + ctxId);
    }

    public String getCtxIdByDeviceId(String deviceId) {
        return (String) redisUtil.get("deviceId" + deviceId);
    }
    public boolean hasWayUploadByDev(String getwayDevid,String deviceId) {
        return redisUtil.hasKey("GDD:"+getwayDevid+deviceId);
    }
    public void setWayUploadByDev(String getwayDevid,String deviceId,String data) {
         redisUtil.set("GDD:"+getwayDevid+deviceId,data);
    }
    public boolean setIfAbSentWayUploadByDev(String getwayDevid,String deviceId) {
       return redisUtil.setIfAbSent("GDD:"+getwayDevid+deviceId,"1");
    }
    public String getWayUploadByDev(String getwayDevid, String deviceId) {
        return (String) redisUtil.get("GDD:"+getwayDevid+deviceId);
    }
    public String getWayUploadByData(String getwayDevid, String deviceId) {
        return (String) redisUtil.get("GDDDATA:"+getwayDevid+deviceId);
    }

    public void setWayUploadBydata(String getwayDevid,String deviceId,String data) {
       redisUtil.set("GDDDATA:"+getwayDevid+deviceId,data,-1);
    }
    public String getPwidByDevId(String devid){
        return (String) redisUtil.get("pwid:" + devid);
    }

    public void delCtxIdAndDeviceId(String deviceId) {
        try {
            final String key = "deviceId" + deviceId;
            if(!redisUtil.hasKey(key))
                return;
            String ctxId = (String) redisUtil.get(key);
            logger.info("delete old deviceId:{}, ctxId:{}", key, ctxId);
            if (ctxId == null)
                return;
            redisUtil.del(key);
            redisUtil.del("ctxId" + ctxId);
        } catch (Exception ignored) {

        }
    }
    public String delCDBYCtxid(String ctxId) {
        try {
            final String key = "ctxId" + ctxId;
            if(!redisUtil.hasKey(key))
                return null;
            String deviceId = (String) redisUtil.get(key);
            if (ctxId == null)
                return null;
            String newCtxId=(String) redisUtil.get("deviceId" + deviceId);
            redisUtil.del(key);
            if(newCtxId.equals(ctxId)){
                redisUtil.del("deviceId" + deviceId);
                logger.info("delete old deviceId:{}, ctxId:{}", deviceId, ctxId);
                return deviceId;
            }
            return null;
        } catch (Exception ignored) {

        }
        return null;
    }
    //
    // =======================插座图表、历史数据.===========================
    //

    /**
     * 是否存在插座历史数据的key.
     */
    public boolean hasKeyHisDeviceId(String deviceId) {
        return redisUtil.hasKey("history_" + deviceId);
    }

    public void  setRefreShImgStatus(String devid,String staus){
        final String key = "rfImg:"+devid;
        redisUtil.set(key,staus,30);
    }

    public String  getRefreShImgStatus(String devid){
        final String key = "rfImg:"+devid;
       return (String) redisUtil.get(key);
    }
    public void  delRefreShImgStatus(String devid){
        final String key = "rfImg:"+devid;
       redisUtil.del(key);
    }

    //=======================================================================================

    /** 测试：设置跟踪的设备日志，主要是用来系统日志中打印某台设备的所有记录. */
    public void setLogDev(String deviceId) {
        redisUtil.set("logDeviceId", deviceId);
    }
    /** 测试：打印当前设备日志. */
    public String getLogDev() {
        try{
            return (String)redisUtil.get("logDeviceId");
        }catch (Exception e){
            return "";
        }
    }

//    public String getLogDev() {
//        try{
//            if(DevCommon.LOG_DEV.length() > 0)
//                return DevCommon.LOG_DEV;
//            else{
//                String logDev = (String)redisUtil.get("logDev");
//                DevCommon.LOG_DEV = logDev == null ? "" : logDev;
//                return DevCommon.LOG_DEV;
//            }
//        }catch (Exception e){
//            return "";
//        }
//    }
}
